#!/bin/bash

# ES Archive 项目目录清理脚本
# 清理不必要的文件，整理目录结构

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 确认操作
confirm_cleanup() {
    echo "=== ES Archive 项目清理 ==="
    echo "此脚本将清理以下内容："
    echo "  • 临时文件和缓存"
    echo "  • 重复的 Dockerfile"
    echo "  • 测试和调试文件"
    echo "  • 多余的文档文件"
    echo "  • Python 缓存文件"
    echo ""
    read -p "确认继续清理？(y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        log_info "清理已取消"
        exit 0
    fi
}

# 创建备份
create_backup() {
    local backup_dir="backup_$(date +%Y%m%d_%H%M%S)"
    log_info "创建备份目录: $backup_dir"
    mkdir -p "$backup_dir"
    
    # 备份重要的临时文件
    if [ -f "es_config.yaml" ]; then
        cp "es_config.yaml" "$backup_dir/"
    fi
    
    log_success "备份完成"
}

# 清理 Python 缓存文件
cleanup_python_cache() {
    log_info "清理 Python 缓存文件..."
    
    # 删除 __pycache__ 目录
    find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
    
    # 删除 .pyc 文件
    find . -name "*.pyc" -delete 2>/dev/null || true
    
    # 删除 .pyo 文件
    find . -name "*.pyo" -delete 2>/dev/null || true
    
    log_success "Python 缓存清理完成"
}

# 清理构建文件
cleanup_build_files() {
    log_info "清理构建文件..."
    
    # 清理 dist 目录中的旧版本
    if [ -d "dist" ]; then
        log_warning "保留 dist 目录，但清理旧版本文件"
        find dist -name "es_archive-0.1.0*" -delete 2>/dev/null || true
    fi
    
    # 清理 egg-info 中的缓存
    if [ -d "src/es_archive.egg-info" ]; then
        find src/es_archive.egg-info -name "*.pyc" -delete 2>/dev/null || true
    fi
    
    log_success "构建文件清理完成"
}

# 清理重复的 Dockerfile
cleanup_dockerfiles() {
    log_info "清理重复的 Dockerfile..."
    
    # 保留主要的 Dockerfile，删除特定镜像源的版本
    local files_to_remove=(
        "Dockerfile.es-archive"
        "Dockerfile.es-archive.aliyun" 
        "Dockerfile.es-archive.huawei"
    )
    
    for file in "${files_to_remove[@]}"; do
        if [ -f "$file" ]; then
            log_warning "删除: $file"
            rm -f "$file"
        fi
    done
    
    log_success "Dockerfile 清理完成"
}

# 清理测试和调试文件
cleanup_test_debug_files() {
    log_info "清理测试和调试文件..."
    
    local files_to_remove=(
        "simple_debug_test.py"
        "fix_backup_metadata.py"
        "main.py"
        "t_tcpstate.py"
        "tcpstate_count.py"
        "test_config_paths.py"
        "proc_name_test.csv"
        "test-docker.sh"
        "test-image.sh"
    )
    
    for file in "${files_to_remove[@]}"; do
        if [ -f "$file" ]; then
            log_warning "删除: $file"
            rm -f "$file"
        fi
    done
    
    # 清理 examples 中的临时文件
    if [ -d "examples" ]; then
        rm -f examples/monitor.txt examples/node.txt 2>/dev/null || true
        rm -f examples/tour_*.html 2>/dev/null || true
    fi
    
    log_success "测试和调试文件清理完成"
}

# 清理多余的文档文件
cleanup_docs() {
    log_info "整理文档文件..."
    
    # 创建 docs/archive 目录存放旧文档
    mkdir -p docs/archive
    
    local docs_to_archive=(
        "DEBUG_MODE_AND_PROGRESS_FIX.md"
        "DOCKER_BUILD_SUCCESS.md"
        "DOCKER_COMPOSE_SUMMARY.md"
        "DOCKER_MIRRORS.md"
        "DOCKER_MIRRORS_SUMMARY.md"
        "DOCKER_USAGE.md"
        "MEMORY_FIX_GUIDE.md"
        "优化总结.md"
    )
    
    for doc in "${docs_to_archive[@]}"; do
        if [ -f "$doc" ]; then
            log_info "归档文档: $doc -> docs/archive/"
            mv "$doc" docs/archive/
        fi
    done
    
    log_success "文档整理完成"
}

# 整理配置文件
organize_config_files() {
    log_info "整理配置文件..."
    
    # 确保 config 目录存在
    mkdir -p config
    
    # 移动主配置文件到 config 目录并重命名
    if [ -f "es_config.yaml" ]; then
        log_info "移动 es_config.yaml -> config/default.yaml"
        mv "es_config.yaml" "config/default.yaml"
    fi
    
    # 创建示例配置文件
    if [ ! -f "config/example.yaml" ]; then
        cp "config/default.yaml" "config/example.yaml" 2>/dev/null || true
    fi
    
    log_success "配置文件整理完成"
}

# 清理临时目录
cleanup_temp_dirs() {
    log_info "清理临时目录..."
    
    # 清理测试备份目录
    if [ -d "test_backups" ]; then
        log_warning "清理测试备份目录"
        rm -rf test_backups
    fi
    
    # 清理空的数据目录
    if [ -d "data" ]; then
        find data -type d -empty -delete 2>/dev/null || true
        # 如果 data 目录为空，则删除
        rmdir data 2>/dev/null || true
    fi
    
    log_success "临时目录清理完成"
}

# 更新 .gitignore
update_gitignore() {
    log_info "更新 .gitignore..."
    
    cat > .gitignore << 'EOF'
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual Environment
venv/
env/
ENV/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Project specific
data/backups/
data/logs/
data/metadata/
backups/
logs/
metadata/
*.log

# Docker
.dockerignore

# Temporary files
*.tmp
*.temp
backup_*/

# Config files with sensitive data
config/production.yaml
config/secrets.yaml
.env
EOF
    
    log_success ".gitignore 更新完成"
}

# 创建清理后的目录结构说明
create_structure_doc() {
    log_info "创建目录结构说明..."
    
    cat > DIRECTORY_STRUCTURE.md << 'EOF'
# ES Archive 项目目录结构

```
es-archive/
├── src/                          # 源代码
│   └── es_archive/              # 主包
│       ├── cli/                 # 命令行接口
│       ├── config/              # 配置管理
│       ├── core/                # 核心功能
│       ├── monitoring/          # 监控模块
│       └── utils/               # 工具函数
├── config/                       # 配置文件
│   ├── default.yaml             # 默认配置
│   ├── example.yaml             # 示例配置
│   ├── docker-config-simple.yaml # Docker 简化配置
│   └── docker-config.yaml       # Docker 完整配置
├── docs/                         # 文档
│   ├── archive/                 # 归档文档
│   ├── api/                     # API 文档
│   ├── CLI_USAGE.md             # CLI 使用指南
│   ├── CONFIG_REFERENCE.md      # 配置参考
│   └── user-guide.md            # 用户指南
├── examples/                     # 示例代码
│   ├── config_examples/         # 配置示例
│   ├── basic_usage.py           # 基础用法
│   └── advanced_scenarios.py    # 高级场景
├── tests/                        # 测试代码
│   ├── integration/             # 集成测试
│   ├── performance/             # 性能测试
│   └── test_*.py                # 单元测试
├── deploy/                       # 部署相关
│   ├── kubernetes/              # K8s 部署文件
│   └── scripts/                 # 部署脚本
├── dist/                         # 构建产物
├── Dockerfile                    # Docker 构建文件
├── Dockerfile.minimal           # 最小化 Docker 文件
├── docker-compose.yml           # Docker Compose 配置
├── sync-data.sh                 # 数据同步脚本
├── build-docker.sh              # Docker 构建脚本
├── pyproject.toml               # 项目配置
├── requirements.txt             # Python 依赖
├── uv.lock                      # UV 锁定文件
└── README.md                    # 项目说明
```

## 主要目录说明

- **src/**: 包含所有源代码，采用标准的 Python 包结构
- **config/**: 配置文件目录，包含各种环境的配置
- **docs/**: 项目文档，包含用户指南和 API 文档
- **examples/**: 示例代码和配置，帮助用户快速上手
- **tests/**: 测试代码，包含单元测试、集成测试和性能测试
- **deploy/**: 部署相关文件，支持 Docker 和 Kubernetes
- **dist/**: 构建产物，包含打包后的分发文件

## 运行必需文件

核心运行文件：
- `src/es_archive/` - 主要源代码
- `config/default.yaml` - 默认配置
- `pyproject.toml` - 项目配置
- `requirements.txt` - 依赖列表

Docker 运行文件：
- `Dockerfile.minimal` - 推荐的 Docker 文件
- `docker-compose.yml` - Docker Compose 配置
- `sync-data.sh` - 便捷的同步脚本

## 可选文件

- `examples/` - 示例代码（学习用）
- `tests/` - 测试代码（开发用）
- `docs/` - 文档（参考用）
- `deploy/` - 部署文件（生产用）
EOF
    
    log_success "目录结构说明创建完成"
}

# 显示清理结果
show_cleanup_result() {
    log_info "清理完成！"
    echo ""
    echo "=== 清理结果 ==="
    echo "✓ Python 缓存文件已清理"
    echo "✓ 重复的 Dockerfile 已删除"
    echo "✓ 测试和调试文件已清理"
    echo "✓ 文档文件已整理到 docs/archive/"
    echo "✓ 配置文件已整理到 config/"
    echo "✓ .gitignore 已更新"
    echo "✓ 目录结构说明已创建"
    echo ""
    echo "当前目录大小："
    du -sh . 2>/dev/null || echo "无法计算目录大小"
    echo ""
    echo "主要文件："
    echo "  • 源代码: src/es_archive/"
    echo "  • 配置: config/default.yaml"
    echo "  • Docker: Dockerfile.minimal"
    echo "  • 同步脚本: sync-data.sh"
    echo "  • 文档: DIRECTORY_STRUCTURE.md"
}

# 主函数
main() {
    confirm_cleanup
    create_backup
    cleanup_python_cache
    cleanup_build_files
    cleanup_dockerfiles
    cleanup_test_debug_files
    cleanup_docs
    organize_config_files
    cleanup_temp_dirs
    update_gitignore
    create_structure_doc
    show_cleanup_result
}

# 执行清理
main "$@"
